<?php

require_once 'classes/RaceToAnimal.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';
require_once '../config/config.php';

/**
 * Classe du service CRUD pour la gestion des Races des animaux
 * 
 * @author Manixab Billy
 * @date 05.06.2012
 */

class SCraceToAnimal {
    
    private $db;
    
    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        
    }
    
    /**
     * Ajoute un RaceToAnimal
     * @param uneRaceToAnimal une race à ajouter à un animal
     * @return Message
     */
    public function ajouter($uneRaceToAnimal) {
        $uneRaceMemorisee = null;
        try {
            
            $query =  $this->db->prepare("INSERT INTO racetoanimal " .
                   "(animal_id, race_nom, typeDeRace_nom) VALUES(:animal_id, :race_nom, :typeDeRace_nom)");

            $query->execute(array(
                    'animal_id'        => $uneRaceToAnimal->getAnimal_id(),
                    'race_nom'         => $uneRaceToAnimal->getRace_nom(),
                    'typeDeRace_nom'   => $uneRaceToAnimal->getTypeDeRace_nom()
               ));
            $uneRaceMemorisee = $uneRaceToAnimal;

            $query->closeCursor();
        }
        catch(PDOException $e) {
            return new Message("Race d'animal non ajoutée: ".$e->getMessage());
        }
        return $uneRaceMemorisee;
    }
    
    /**
     * Methode permettant de modifier une raceToAnimal
     * @param uneRaceToAnimal RaceToAnimal à modifier
     * @return Message  
     */
    public function modifier($uneRaceToAnimalAModifier) {
        try {
            $query = $this->db->prepare("UPDATE racetoanimal SET ".
                    "race_nom = :race_nom, typeDeRace_nom = :typeDeRace_nom ".
                    "WHERE animal_id = :animal_id");
            
            $query->execute(array(
                'animal_id'         => $uneRaceToAnimalAModifier->getAnimal_id(),
                'race_nom'          => $uneRaceToAnimalAModifier->getRace_nom(),
                'typeDeRace_nom'    => $uneRaceToAnimalAModifier->getTypeDeRace_nom()
            ));
            $query->closeCursor();
            
            $message = new Message("Race d'animal modifiée");
        }
        catch(PDOException $e) {
            $message = new Message("Race d'animal non modifiée: ".$e->getMessage());
        }
        return $message;
    }
    
    /**
     * Methode permettant de supprimer une race d'animal
     * @param uneRaceToAnimal RaceToAnimal à supprimer
     * @return Message
     */
    public function supprimer($uneRaceToAnimal) {
        try{
            $query = $this->db->prepare("DELETE FROM racetoanimal WHERE animal_id = :animal_id AND ".
                    "race_nom = :race_nom AND typeDeRace_nom = :typeDeRace_nom");
            
            $query->execute(array(
                'animal_id'        => $uneRaceToAnimal->getAnimal_id(),
                'race_nom'         => $uneRaceToAnimal->getRace_nom(),
                'typeDeRace_nom'   => $uneRaceToAnimal->getTypeDeRace_nom()
            ));
            
            $query->closeCursor();
            
            $message = new Message("Race d'animal supprimé");
        }
        catch(PDOException $e){
            $message = new Message("Race d'animal non supprimée: ".$e->getMessage());
        }
        return $message;
    }
    
     /**
     * @param Race d'animal de recherche sous forme d'objet RaceToAnimal
     * @return un tableau d'objet RaceToAnimal
     */
    public function lister($raceToAnimalALister){
        try {
            $query = "SELECT * FROM racetoanimal ";
            $query_Where="WHERE";
            if ($raceToAnimalALister != NULL) {
                if ($raceToAnimalALister->getAnimal_id() != NULL) {
                    $query_Where .= " animal_id = '".$raceToAnimalALister->getAnimal_id()."' AND ";
                }
                if ($raceToAnimalALister->getRace_nom() != NULL) {
                    $query_Where .= " race_nom = '".$raceToAnimalALister->getRace_nom()."' AND ";
                }
                if ($raceToAnimalALister->getTypeDeRace_nom() != NULL) {
                    $query_Where .= " typeDeRace_nom = '".$raceToAnimalALister->getTypeDeRace_nom()."' AND ";
                }
            }
        
            $query_Where = substr($query_Where,0,-5);
            $query .= $query_Where;
            
            $lesRaceToAnimalTrouves = null;
            $uneRaceToAnimalLu = null;
            $result=$this->db->query($query);
            
            while($row=$result->fetch()) {
                $uneRaceToAnimalLu = new RaceToAnimal($row["animal_id"], $row["race_nom"], $row["typeDeRace_nom"]);
                $lesRaceToAnimalTrouves[] = $uneRaceToAnimalLu;
            }

        }
        catch(PDOException $e) {
            print($e->getMessage());
        }
        return $lesRaceToAnimalTrouves;
    }
    
} 
?>
